# BlueGreen Deployments of Serverless Applications ## 背景 您的组织最近决定采用无服务器架构来构建下一代服务API。开发团队已经使用AWS API Gateway和AWS Lambda为客户提供强大的API。然而,开发者一直在使用单一环境来构建和测试API,并且现在需要您的帮助来为测试(预生产)和生产目的构建完全隔离的环境。他们知道分离这些环境的重要性,以便在不影响使用稳定版本API的客户的情况下继续改进API。 ## 任务 您被指派创建一个蓝/绿部署模型,作为组织内当前正在开发的各种服务API的基础。蓝/绿模型必须确保“预生产”(绿色)和“生产”(蓝色)环境的完全隔离。 ### 创建Greeting API - 您首先创建了一个非常简单的API称为Greeting API。 - 然后,创建了两个API Gateway阶段(staging 和 prod),一个实现API逻辑的Lambda函数(GreetingLambda),以及两个Lambda别名(staging 和 prod)。 - 计划是让“staging” API端点解析到“staging” Lambda别名,“prod” API阶段解析到“prod” Lambda别名。 ### 遇到的问题 当您从浏览器访问生产和预生产的API端点时,总是得到相同的结果,即使只向预生产环境部署了新更改。 ### 重要参数 - **APIStagingStageGreetingURL**: 预生产(Green) API环境的URL - **APIProdStageGreetingURL**: 生产(Blue) API环境的URL - **CheckChallengeAnswerURL**: 解决挑战后可以查看答案的URL ## 解决方案步骤 ### 步骤1: 修改Lambda函数代码 - 打开AWS Lambda控制台并选择GreetingLambda。 - 使用编辑器将问候字符串从"Hello"更改为"Hi"。 - 点击“部署”,然后点击“测试”以测试Lambda更改。 - 创建测试事件,输入`{"name": "awsstudent"}`作为事件数据。 - 测试完成后检查输出是否为`{"greeting": "Hi, awsstudent!"}`。 ### 步骤2: 发布新的Lambda函数版本并部署到预生产环境 - 在Lambda控制台上发布一个新的版本。 - 更新“staging”别名指向新发布的版本。 - 测试“staging”别名确认输出正确。 ### 步骤3: 排查API Gateway配置问题 - 重新访问预生产和生产API端点。 - 如果两个端点都返回`{"greeting": "Hi, awsstudent!"}`,则说明API Gateway配置有误。 ### 修复问题 - 进入API Gateway控制台,检查每个阶段的集成请求设置。 - 确保“staging”阶段的集成请求指向“staging” Lambda别名,而“prod”阶段的集成请求指向“prod” Lambda别名。 - 保存更改后重新测试API端点。 ### 完成挑战 - 当您解决了这个问题,访问**CheckChallengeAnswerURL**以验证解决方案是否正确。 # 当我们按照步骤之后,问题出现在API上,这是我们只需要检查API即可 ## 只需要将API中Lamdba函数添加${stageVariables.environment}即可 ![photo](./figures/apilamdba-1.png) ![photo](./figures/lamdba-2.png)